package com.lonely.system.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lonely.common.core.domain.Select;
import com.lonely.system.domain.entity.SysRole;
import com.lonely.system.domain.dto.role.*;
import com.lonely.system.domain.vo.system.role.QueryToBeAllocatedUserInfoVo;
import com.lonely.system.domain.vo.system.role.SysRoleInfoVo;
import com.lonely.system.domain.vo.system.role.SysRolePageQueryVo;
import com.lonely.system.domain.vo.system.role.SysRoleUserInfoVo;

import java.util.List;
import java.util.Set;

/**
 * 角色业务层
 *
 * @author fzzf
 */
public interface ISysRoleService extends IService<SysRole> {

    /**
     * 菜单分页查询列表
     *
     * @param queryDto
     * @return
     */
    Page<SysRolePageQueryVo> page(SysRolePageQueryDto queryDto);

    /**
     * 根据角色id获取角色信息
     *
     * @param roleId
     * @return
     */
    SysRoleInfoVo getRoleInfo(Long roleId);

    /**
     * 创建角色
     *
     * @param submitDto
     */
    void create(SysRoleSubmitDto submitDto);

    /**
     * 编辑角色
     *
     * @param submitDto
     */
    void edit(SysRoleSubmitDto submitDto);


    /**
     * 通过角色ID删除角色
     *
     * @param roleId 角色ID
     * @return 结果
     */
    void deleteRoleById(Long roleId);


    /**
     * 批量删除角色
     *
     * @param requestDto
     */
    void batchDeleteByRoleIds(BatchDeleteRoleDto requestDto);

    /**
     * 新增角色分页查询列表
     *
     * @param queryDto
     * @return
     */
    Page<SysRolePageQueryVo> addRolePage(AddRolePageQueryDto queryDto);


    /**
     * 获取角色下拉列表选项值
     *
     * @return
     */
    List<Select> getRoleSelectOptions();


    /**
     * 获取角色分配的用户信息分页列表
     *
     * @param queryDto
     * @return
     */
    Page<SysRoleUserInfoVo> getRoleUserInfoPage(SysRoleUserPageQueryDto queryDto);


    /**
     * 获取指定角色待分配的用户信息分页列表
     *
     * @param queryDto
     * @return
     */
    Page<QueryToBeAllocatedUserInfoVo> getRoleToBeAllocatedUserInfoPage(QueryToBeAllocatedUserInfoDto queryDto);

    /**
     * 启用角色
     *
     * @param roleId
     */
    void enabled(Long roleId);

    /**
     * 停用角色
     *
     * @param roleId
     */
    void disabled(Long roleId);


    /**
     * 根据用户ID查询角色
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    Set<String> selectRolePermissionByUserId(Long userId);

}
